* ============================================================================ *
* PROJECT:		The bottom-up spillover effect for radical right parties 
* AUTHOR: 		Ka Ming Chan
* DATE:			2022-04-21
* ============================================================================ *

* ---------------------------------------------------------------------------- *
* Settings and Open Data
* ---------------------------------------------------------------------------- *
clear
set more off
// ssc install coefplot
// ssc install plotplainblind
// ssc install rdrobust
// ssc install estout
cd ""
use "agg_level.dta", replace
set scheme plotplainblind

* ------------------------------------------------------------------------------
* Figure 1
* ------------------------------------------------------------------------------
twoway (scatter  nb_partyvoteper partyvoteper if  nb_partyvoteper!=0 & party=="AfD" & election=="landtagswahl" , msymbol(O) mcolor("0 158 224%50")) || ///
	(scatter  nb_partyvoteper partyvoteper if  nb_partyvoteper!=0 & party=="DVU" & election=="landtagswahl" , msymbol(D) mcolor(gold%50))|| ///
	(scatter  nb_partyvoteper partyvoteper if  nb_partyvoteper!=0 & party=="NPD" & election=="landtagswahl" , msymbol(T) mcolor("139 71 38%50")) || ///
	(scatter  nb_partyvoteper partyvoteper if  nb_partyvoteper!=0 & party=="REP" & election=="landtagswahl" , msymbol(+) mcolor(red%50)) || ///
	(scatter  nb_partyvoteper partyvoteper if  nb_partyvoteper!=0 & party=="Schill/Offensive_D" & election=="landtagswahl" , msymbol(X) mcolor(gray)) || ///
	(scatter  nb_partyvoteper partyvoteper if partyvoteper>=5  & nb_partyvoteper!=0 & party=="AfD" & election=="landtagswahl" , msymbol(i) mlabel(land) mlabsize(vsmall)) || ///
 	lowess nb_partyvoteper partyvoteper if partyvoteper<5 & nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl", lc(black%30)  || /// 
 	lowess nb_partyvoteper partyvoteper if partyvoteper>5 & nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl", lc(black%30)  ||, ///
	xlabel(0(5)25) ytitle("vote share in federal election", size(small)) xtitle("vote share in regional election", size(small)) ///
	xline(5, lpattern(solid) lcolor(gs10)) legend(off) saving(plot_radicalright, replace)	legend(on position(6) col(5) order(1 "AfD" 2 "DVU" 3 "NPD" 4 "REP" 5 "Schill"))  
graph export "Fig 1.png", replace 

* ------------------------------------------------------------------------------
* Regression discontinuity analysis for radical right parties  
* ------------------------------------------------------------------------------
* Forcing (Vote share in state election at time t in state s): partyvoteper
* Outcome (Vote share in subsequent federal election in state s): nb_partyvoteper
gen forcing=partyvoteper-5
gen tr=0
replace tr=1 if forcing>=0
replace tr=. if forcing==.
gen forctr=forcing*tr

* Bandwidth: Full sample 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland) all
est store radicalright_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 5%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) all
est store radicalright_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 4%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) all
est store radicalright_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 3%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland) all
est store radicalright_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 2.692%
rdbwselect nb_partyvoteper forcing if nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl" 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(2.692 2.692) vce(cluster dateland)  all
est store radicalright_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 

* Figure 2: Upper panel
grstyle init
grstyle color p1 black
grstyle color p2 black
grstyle color p3 black
grstyle color p4 black	
grstyle color p5 black
coefplot radicalright_full  radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt, keep(Conventional) baselevels  ///
	p1(msymbol(O) mlabel("Full sample") mlabp(9) mlabs(vsmall)) ///
	p2(msymbol(O) mlabel("{c 177}5%") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("{c 177}4%") mlabp(9) mlabs(vsmall)) ///
	p4(msymbol(O) mlabel("{c 177}3%") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("{c 177}2.692%") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	title("") ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-2(2)10)  coeflabels (Conventional=" ") legend(off) saving(baseline_radicalright, replace)

* Figure 2: Lower panel
postutil clear
postfile days id tr stderr dof N using "temporal_radicalright.dta", replace
forvalues x=1/1200 {
	quietly count if (forcing>=-4 & forcing<=4 & nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl" & days>`x' & days!=.) //
	scalar n=r(N)
	quietly regress nb_partyvoteper forcing tr forctr if (forcing>=-4 & forcing<=4 & nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl" & days>`x' & days!=.),cluster(dateland)
	matrix eb = e(b)
	matrix eV = e(V)
	post days (`x') (eb[1,2]) (sqrt(eV[2,2])) (e(df_r)) (n)
}
postclose days

preserve
use "temporal_radicalright.dta", clear
drop if stderr==0 | N<30
generate trll = tr-stderr*1.96
generate trul = tr+stderr*1.96

twoway (rarea trul trll id, color(grey*.3)) (scatter tr id, msymbol(oh) mcolor(black)) (lowess tr id, lcolor(plr1) lpattern(dash)) ///
	, ytitle(Average treatment effect ({&tau})) yline(0, lcolor(gs10))	xtitle("Excluded days") ///
	title("") ylabel(-10(5)10) xlabel(0(100)1100) legend(off) saving(temporal_radicalright, replace)
restore 	

graph combine baseline_radicalright.gph temporal_radicalright.gph, rows(2)
graph export "Fig 2.png", replace



* Table B.1. Bottom-up spillover effect for radical right parties (Conventional Estimate).
esttab radicalright_full radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt using "table B1.rtf", ///
	 mtitles("" "" "" "" "" "") modelwidth(6) ///
	 keep(Conventional)  scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2)  star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.1. Bottom-up spillover effect for radical right parties (Conventional Estimate)..")  replace 


*********************
* Robustness checks *
*********************
* ------------------------------------------------------------------------------
* Table B.2. Bottom-up spillover effect for radical right parties (Biased-corrected estimate).
esttab radicalright_full radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt using "table B2.rtf", ///
	 mtitles("" "" "" "" "" "") modelwidth(6) ///
	 keep(Bias-corrected) scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2)  star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.2. Bottom-up spillover effect (Biased-corrected estimate).")  replace 

* Figure B.1. Regression discontinuity estimates of the bottom-up spillover effect for radical right parties (Bias-corrected Estimate).	 
coefplot radicalright_full  radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt, keep(Bias-corrected) baselevels  ///
	p1(msymbol(O) mlabel("Full sample") mlabp(9) mlabs(vsmall)) ///
	p2(msymbol(O) mlabel("{c 177}5% bandwidth") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("{c 177}4% bandwidth") mlabp(9) mlabs(vsmall)) ///
	p4(msymbol(O) mlabel("{c 177}3%") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("{c 177}2.692%") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-2(2)10) coeflabels (Bias-corrected="Bias-corrected") legend(off)
graph export "Fig B1.png", replace

* ------------------------------------------------------------------------------
* Table B.3. Bottom-up spillover effect that exclude one radical right party in each model
replace party="SOD" if party=="Schill/Offensive_D "
foreach x in "AfD" "DVU" "NPD"  "REP" "SOD"  {
	rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1  & party!=("`x'") & election=="landtagswahl"), h(5 20) vce(cluster dateland) all
	est store without`x'
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
}
esttab withoutAfD withoutDVU withoutNPD withoutREP withoutSOD /// 
	using "Table B3.rtf", ///
	keep(Conventional) scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	b(2) se(2) 	mtitles("without AfD" "without DVU" "without NPD" "without REP" "without Schill and Offensive D ") modelwidth(7) ///
	title("Table B.3. Bottom-up spillover effect that exclude one radical right party in each model.") replace
	
* Figure B.2. Regression discontinuity estimates of the bottom-up spillover effect (dropping one radical right party at a time).
grstyle init
grstyle color p1 black
grstyle color p2 black
grstyle color p3 black
grstyle color p4 black	
grstyle color p5 black
coefplot withoutAfD withoutDVU withoutNPD withoutREP withoutSOD, keep(Conventional) baselevels  ///
	p1(msymbol(O) mlabel("drop AfD") mlabp(9) mlabs(vsmall))  p2(msymbol(O) mlabel("drop DVU") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("drop NPD") mlabp(9) mlabs(vsmall)) p4(msymbol(O) mlabel("drop REP") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("drop Schill") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-2(2)10) coeflabels (Conventional=" ") legend(off)
graph export "Fig B2.png", replace


	
* ------------------------------------------------------------------------------
* Placebo test: Previous federal election as outcome
* ------------------------------------------------------------------------------
* Bandwidth: Full sample 
rdrobust lb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland) 
est store radicalright_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 5%
rdrobust lb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) 
est store radicalright_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 4%
rdrobust lb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) 
est store radicalright_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 3%
rdrobust lb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland)
est store radicalright_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 2.692%
rdrobust lb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(2.692 2.692) vce(cluster dateland) 
est store radicalright_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace

* Table B.4. Placebo test: vote share in previous federal election as outcome
esttab radicalright_full radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt using "Table B4.rtf", ///
	 mtitles("" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in previous federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.4. Placebo test: vote share in previous federal election as outcome.")  replace 

* ------------------------------------------------------------------------------
* Placebo test: Threshold at 3% 
* ------------------------------------------------------------------------------
gen forcing_placebo=partyvoteper-3
* Bandwidth: Full sample 
rdrobust nb_partyvoteper forcing_placebo if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland)  
est store radicalright_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 5%
rdrobust nb_partyvoteper forcing_placebo if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) 
est store radicalright_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 4%
rdrobust nb_partyvoteper forcing_placebo if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) 
est store radicalright_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 3%
rdrobust nb_partyvoteper forcing_placebo if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland)
est store radicalright_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 2.692%
eststo rdrobust_opt: rdrobust nb_partyvoteper forcing_placebo if (nb_partyvoteper!=0 & radicalright==1 & election=="landtagswahl"), h(2.692 2.692) vce(cluster dateland) 
est store radicalright_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace


* Table B.5. Placebo test: pseudo-threshold at 3%.
esttab radicalright_full radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt using "Table B5.rtf", ///
	 mtitles("" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.5. Placebo test: pseudo-threshold at 3%.")  replace 

* ------------------------------------------------------------------------------
* Placebo test: Top-down 
* ------------------------------------------------------------------------------
* Bandwidth: Full sample 
rdrobust nl_partyvoteper forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 20) vce(cluster dateland) 
est store radicalright_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 5%
rdrobust nl_partyvoteper forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 5) vce(cluster dateland) 
est store radicalright_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 4%
rdrobust nl_partyvoteper forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(4 4) vce(cluster dateland) 
est store radicalright_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
 * Bandwidth: 3%
rdrobust nl_partyvoteper forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(3 3) vce(cluster dateland)
est store radicalright_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 2.692%
rdrobust nl_partyvoteper forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(2.692 2.692) vce(cluster dateland) 
est store radicalright_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace

* Table B.6. Placebo test: top-down spillover effect
esttab radicalright_full radicalright_0_10 radicalright_1_9 radicalright_2_8 radicalright_opt using "Table B6.rtf", ///
	 mtitles("" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent regional election; treatment is passing through the 5% threshold in a federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.6. Placebo test: top-down spillover effect.")  replace 

* ------------------------------------------------------------------------------
* Covariates balance test 
* ------------------------------------------------------------------------------
* post-1989
rdrobust post89 forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 20) vce(cluster dateland) all
est store post89_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
rdrobust post89 forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 5) vce(cluster dateland) all
est store post89_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
rdrobust post89 forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(4 4) vce(cluster dateland) all
est store post89_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
rdrobust post89 forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(3 3) vce(cluster dateland) all
est store post89_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
rdrobust post89 forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(2.692 2.692) vce(cluster dateland)  all
est store post89_opt	
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
coefplot post89_full post89_0_10 post89_1_9 post89_2_8 post89_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Post-1989", size(large)) coeflabels (Conventional=" ")  ///
	legend(on position(6) col(5) order(2 "Full sample" 4 "{c 177}5%" 6 "{c 177}4%" 8 "{c 177}3%" 10 "{c 177}2.692%")) saving(post89, replace)

* 16 states
forvalues x=1/16 {
	display `x'
	rdrobust st`x'  forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 20) vce(cluster dateland) all
	est store st`x'_full
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
	rdrobust st`x'  forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(5 5) vce(cluster dateland) all
	est store st`x'_0_10
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
	rdrobust st`x'  forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(4 4) vce(cluster dateland) all
	est store st`x'_1_9
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
	rdrobust st`x'  forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(3 3) vce(cluster dateland) all
	est store st`x'_2_8
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
	rdrobust st`x'  forcing if (nl_partyvoteper!=0 & radicalright==1 & election=="bundestagswahl"), h(2.692 2.692) vce(cluster dateland) all
	est store st`x'_opt	
	estadd scalar lhs=e(N_h_l), replace
	estadd scalar rhs=e(N_h_r), replace
}

* Figure B.3. Coefficient plot of covariate balance tests
coefplot st1_full st1_0_10 st1_1_9 st1_2_8 st1_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Baden-Württemberg", size(large)) coeflabels (Conventional=" ") legend(off) saving(st1, replace)
coefplot st2_full st2_0_10 st2_1_9 st2_2_8 st2_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Bavaria", size(large)) coeflabels (Conventional=" ") legend(off) saving(st2, replace)
coefplot st1_full st3_0_10 st3_1_9 st3_2_8 st3_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Berlin", size(large)) coeflabels (Conventional=" ") legend(off) saving(st3, replace)
coefplot st4_full st4_0_10 st4_1_9 st4_2_8 st4_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Brandenburg", size(large)) coeflabels (Conventional=" ") legend(off) saving(st4, replace)	
coefplot st5_full st5_0_10 st5_1_9 st5_2_8 st5_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Bremen", size(large)) coeflabels (Conventional=" ") legend(off) saving(st5, replace)
coefplot st6_full st6_0_10 st6_1_9 st6_2_8 st6_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Hamburg", size(large)) coeflabels (Conventional=" ") legend(off) saving(st6, replace)
coefplot st7_full st7_0_10 st7_1_9 st7_2_8 st7_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Hesse", size(large)) coeflabels (Conventional=" ") legend(off) saving(st7, replace)
coefplot st8_full st8_0_10 st8_1_9 st8_2_8 st8_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Mecklenburg-Vorpommern", size(large)) coeflabels (Conventional=" ") legend(off) saving(st8, replace)
coefplot st9_full st9_0_10 st9_1_9 st9_2_8 st9_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Lower Saxony", size(large)) coeflabels (Conventional=" ") legend(off) saving(st9, replace)
coefplot st10_full st10_0_10 st10_1_9 st10_2_8 st10_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("North Rhine-Westphalia", size(large)) coeflabels (Conventional=" ") legend(off) saving(st10, replace)
coefplot st11_full st11_0_10 st11_1_9 st11_2_8 st11_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Rhineland-Palatinate", size(large)) coeflabels (Conventional=" ") legend(off) saving(st11, replace)	
coefplot st12_full st12_0_10 st12_1_9 st12_2_8 st12_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Saarland", size(large)) coeflabels (Conventional=" ") legend(off) saving(st12, replace)
coefplot st13_full st13_0_10 st13_1_9 st13_2_8 st13_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Saxony", size(large)) coeflabels (Conventional=" ") legend(off) saving(st13, replace)
coefplot st14_full st14_0_10 st14_1_9 st14_2_8 st14_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Saxony-Anhalt", size(large)) coeflabels (Conventional=" ") legend(off) saving(st14, replace)
coefplot st15_full st15_0_10 st15_1_9 st15_2_8 st15_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Schleswig-Holstein", size(large)) coeflabels (Conventional=" ") legend(off) saving(st15, replace)
coefplot st16_full st16_0_10 st16_1_9 st16_2_8 st16_opt, keep(Conventional) baselevels  ///
	p1(msymbol(D))  p2(msymbol(T)) p3(msymbol(S)) p4(msymbol(+)) p5(msymbol(X)) color(black) ciopts(lcolor(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-1(0.5)1) title("Thuringia", size(large)) coeflabels (Conventional=" ") legend(off) saving(st16, replace)	
grc1leg  post89.gph st1.gph st2.gph st3.gph st4.gph st5.gph st6.gph st7.gph st8.gph st9.gph st10.gph st11.gph st12.gph st13.gph st14.gph st15.gph st16.gph
graph export "Fig B3.png", replace


* Table B.7. Covariate balance test (Full Sample).
esttab post89_full st1_full st2_full st3_full st4_full st5_full st6_full st7_full st8_full st9_full st10_full st11_full st12_full st13_full st14_full st15_full st16_full  ///
	using "Table B7.rtf", ///
	mtitles("Post-1989" "Baden-Württemberg" "Bavaria" "Berlin" "Brandenburg" "Bremen" "Hamburg" "Hesse" "Mecklenburg-Vorpommern" "Lower Saxony" "North Rhine-Westphalia" "Rhineland-Palatinate" "Saarland" "Saxony" "Saxony-Anhalt" "Schleswig-Holstein" "Thuringia") modelwidth(8) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(* 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.7. Covariate balance test (Full Sample).")  replace 

* Table B.8. Covariate balance test (5% bandwidth).
esttab post89_0_10 st1_0_10 st2_0_10 st3_0_10 st4_0_10 st5_0_10 st6_0_10 st7_0_10 st8_0_10 st9_0_10 st10_0_10 st11_0_10 st12_0_10 st13_0_10 st14_0_10 st15_0_10 st16_0_10  ///
	using "Table B8.rtf", ///
	mtitles("Post-1989" "Baden-Württemberg" "Bavaria" "Berlin" "Brandenburg" "Bremen" "Hamburg" "Hesse" "Mecklenburg-Vorpommern" "Lower Saxony" "North Rhine-Westphalia" "Rhineland-Palatinate" "Saarland" "Saxony" "Saxony-Anhalt" "Schleswig-Holstein" "Thuringia") modelwidth(8) ///
	scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(* 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.8. Covariate balance test (5% bandwidth).")  replace 	 	 

* Table B.9. Covariate balance test (4% bandwidth). 
esttab post89_1_9 st1_1_9 st2_1_9 st3_1_9 st4_1_9 st5_1_9 st6_1_9 st7_1_9 st8_1_9 st9_1_9 st10_1_9 st11_1_9 st12_1_9 st13_1_9 st14_1_9 st15_1_9 st16_1_9  ///
	using "Table B9.rtf", ///
	mtitles("Post-1989" "Baden-Württemberg" "Bavaria" "Berlin" "Brandenburg" "Bremen" "Hamburg" "Hesse" "Mecklenburg-Vorpommern" "Lower Saxony" "North Rhine-Westphalia" "Rhineland-Palatinate" "Saarland" "Saxony" "Saxony-Anhalt" "Schleswig-Holstein" "Thuringia") modelwidth(8) ///
	scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(* 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.9. Covariate balance test (4% bandwidth).")  replace 	 

* Table B.10. Covariate balance test (3% bandwidth).
esttab post89_2_8 st1_2_8 st2_2_8 st3_2_8 st4_2_8 st5_2_8 st6_2_8 st7_2_8 st8_2_8 st9_2_8 st10_2_8 st11_2_8 st12_2_8 st13_2_8 st14_2_8 st15_2_8 st16_2_8  ///
	using "Table B10.rtf", ///
	mtitles("Post-1989" "Baden-Württemberg" "Bavaria" "Berlin" "Brandenburg" "Bremen" "Hamburg" "Hesse" "Mecklenburg-Vorpommern" "Lower Saxony" "North Rhine-Westphalia" "Rhineland-Palatinate" "Saarland" "Saxony" "Saxony-Anhalt" "Schleswig-Holstein" "Thuringia") modelwidth(8) ///
	scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) star(* 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.10. Covariate balance test (3% bandwidth).")  replace 	 

* Table B.11. Covariate balance test (Optimal bandwidth = 2.69%).	 
esttab post89_opt st1_opt st2_opt st3_opt st4_opt st5_opt st6_opt st7_opt st8_opt st9_opt st10_opt st11_opt st12_opt st13_opt st14_opt st15_opt st16_opt  ///
	using "Table B11.rtf", ///
	mtitles("Post-1989" "Baden-Württemberg" "Bavaria" "Berlin" "Brandenburg" "Bremen" "Hamburg" "Hesse" "Mecklenburg-Vorpommern" "Lower Saxony" "North Rhine-Westphalia" "Rhineland-Palatinate" "Saarland" "Saxony" "Saxony-Anhalt" "Schleswig-Holstein" "Thuringia") modelwidth(5) ///
	scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2) r2(2) star(* 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.11. Covariate balance test (Optimal bandwidth = 2.692%).")  replace 

	 
* ------------------------------------------------------------------------------
* RD Manipulation Test using local polynomial density estimation
* ------------------------------------------------------------------------------
* Table B.12. Manipulation Testing using Local Polynomial Density Estimation.
rddensity forcing if (radicalright==1 & election=="landtagswahl"), h(5 5) 
rddensity forcing if (radicalright==1 & election=="landtagswahl"), h(4 4) 
rddensity forcing if (radicalright==1 & election=="landtagswahl"), h(3 3) 
rddensity forcing if (radicalright==1 & election=="landtagswahl"), h(2.692 2.692) 



***************************************************************************************************************
* Other party families
***************************************************************************************************************
* ------------------------------------------------------------------------------
* Radical Left
* ------------------------------------------------------------------------------
* Bandwidth: Full sample 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland) 
est store radicalleft_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 5%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) 
est store radicalleft_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 4%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) 
est store radicalleft_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 3%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland) 
est store radicalleft_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 2.692%
rdbwselect nb_partyvoteper forcing if nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl" 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & radicalleft==1 & election=="landtagswahl"), h(2.754 2.754) vce(cluster dateland)  
est store radicalleft_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace

* Table B.14. Bottom-up spillover effect for radical left parties (Conventional Estimate).
esttab radicalleft_full radicalleft_0_10 radicalleft_1_9 radicalleft_2_8 radicalleft_opt using "Table B14.rtf", ///
	 mtitles("" "" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2)  star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.14. Bottom-up spillover effect for radical left parties.")  replace 
	 

* Figure 3: Upper left
coefplot radicalleft_full  radicalleft_0_10 radicalleft_1_9 radicalleft_2_8 radicalleft_opt,  keep(Conventional) baselevels  ///
	p1(msymbol(O) mlabel("Full sample") mlabp(9) mlabs(vsmall))  ///
	p2(msymbol(O) mlabel("{c 177}5%") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("{c 177}4%") mlabp(9) mlabs(vsmall)) ///
	p4(msymbol(O) mlabel("{c 177}3%") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("{c 177}2.754%") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-6(2)4) coeflabels (Conventional=" ") legend(off) title(Radical Left Parties) saving (radicalleft, replace)

* ------------------------------------------------------------------------------
* Green
* ------------------------------------------------------------------------------
* Bandwidth: Full sample 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & green==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland) 
est store green_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 5%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & green==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) 
est store green_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 4%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & green==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) 
est store green_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 3%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & green==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland) 
est store green_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth:  1.271%
rdbwselect nb_partyvoteper forcing if nb_partyvoteper!=0 & green==1 & election=="landtagswahl" 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & green==1 & election=="landtagswahl"), h(1.271  1.271) vce(cluster dateland)  
est store green_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace

* Table B.15. Bottom-up spillover effect for green parties (Conventional Estimate).
esttab green_full green_0_10 green_1_9 green_2_8 green_opt using "Table B15.rtf", ///
	 mtitles("" "" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2)  star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.15. Bottom-up spillover effect for green parties.")  replace 
	 

* Figure 3: Upper Right
coefplot green_full  green_0_10 green_1_9 green_2_8 green_opt,  keep(Conventional) baselevels  ///
	p1(msymbol(O) mlabel("Full sample") mlabp(9) mlabs(vsmall)) ///
	p2(msymbol(O) mlabel("{c 177}5%") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("{c 177}4%") mlabp(9) mlabs(vsmall)) ///
	p4(msymbol(O) mlabel("{c 177}3%") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("{c 177}1.271%") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-6(2)4) coeflabels (Conventional=" ") legend(off) title(Green Parties) saving (green, replace)


* ------------------------------------------------------------------------------
* Liberal
* ------------------------------------------------------------------------------
* Bandwidth: Full sample 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & lib==1 & election=="landtagswahl"), h(5 20) vce(cluster dateland) 
est store lib_full
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 5%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & lib==1 & election=="landtagswahl"), h(5 5) vce(cluster dateland) 
est store lib_0_10
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 4%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & lib==1 & election=="landtagswahl"), h(4 4) vce(cluster dateland) 
est store lib_1_9
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Bandwidth: 3%
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & lib==1 & election=="landtagswahl"), h(3 3) vce(cluster dateland) 
est store lib_2_8
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace
* Optimal Bandwidth: 1.842%
rdbwselect nb_partyvoteper forcing if nb_partyvoteper!=0 & lib==1 & election=="landtagswahl" 
rdrobust nb_partyvoteper forcing if (nb_partyvoteper!=0 & lib==1 & election=="landtagswahl"), h(1.842 1.842) vce(cluster dateland)  
est store lib_opt
estadd scalar lhs=e(N_h_l), replace
estadd scalar rhs=e(N_h_r), replace

* Table B.16. Bottom-up spillover effect for liberal parties (Conventional Estimate).
esttab lib_full lib_0_10 lib_1_9 lib_2_8 lib_opt using "Table B16.rtf", ///
	 mtitles("" "" "" "" "" "") modelwidth(6) ///
	 scalars ("lhs left of c (N)" "rhs right of c (N)") sfmt(0) noobs /// 
	 b(2) se(2)  star(+ 0.10 * 0.05 ** 0.01 *** 0.001) ///
	 note ("Note: Outcome is party's vote share in subsequent federal election within a particular state. Robust standard errors are in parentheses and they are clustered at state-election level.") ///
	 title ("Table B.16. Bottom-up spillover effect for liberal parties.")  replace 
	 

* Figure 3: Lower Left
coefplot lib_full  lib_0_10 lib_1_9 lib_2_8 lib_opt,  keep(Conventional) baselevels  ///
	p1(msymbol(O) mlabel("full sample") mlabp(9) mlabs(vsmall)) ///
	p2(msymbol(O) mlabel("{c 177}5%") mlabp(9) mlabs(vsmall)) ///
	p3(msymbol(O) mlabel("{c 177}4%") mlabp(9) mlabs(vsmall)) ///
	p4(msymbol(O) mlabel("{c 177}3%") mlabp(9) mlabs(vsmall)) ///
	p5(msymbol(O) mlabel("{c 177}1.842%") mlabp(9) mlabs(vsmall)) ///
	levels(95 90)  ciopts(lwidth(*0.5 *2)  lcolor(black) color(black)) ///
	ytitle(Average treatment effect ({&tau}), size(small)) vertical yline(0) ylabel(-6(2)4)  coeflabels (Conventional=" ")legend(off) title(Liberal Parties) saving (lib, replace)


* Figure 3
graph combine radicalleft.gph green.gph lib.gph, rows(2)
graph export "Fig 3.png", replace 